package me.zhengjie.utils;

import lombok.NonNull;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Collectors;

@NonNull
public class ArrayUtil extends cn.hutool.core.util.ArrayUtil {


    /**
     * isArrayMoreItem:判断数组是否多个元素
     * @param array 数组
     * @return boolean
     */
    public static <E> boolean isArrayMoreItem(E[] array) {
        if (array == null || array.length == 0) {
           return false;
        }
        return array.length > 1;
    }


    /**
     * ArrayFilterAfterToList：数组过滤后转list
     * @param array 数组
     * @param predicate 过滤器
     */
    public static <T> List<T> ArrayFilterAfterToList(T[] array, Predicate<? super T> predicate) {
        if (array == null || array.length == 0) {
            return null; // 返回空数组或原数组
        }
        return Arrays.stream(array).filter(predicate).collect(Collectors.toList());
    }

    /**
     * ArrayFilterAfterToNewArray :数组过滤后转新数组
     * @param array 数组
     * @param predicate 过滤器
     */

    @SuppressWarnings("unchecked")
    public static <T> T[] ArrayFilterAfterToNewArray(T[] array, Predicate<? super T> predicate, Class<T> clazz) {
        if (array == null || array.length == 0) {
            return array; // 返回空数组或原数组
        }

        // 使用流来过滤并收集结果到一个新数组
        return Arrays.stream(array)
                .filter(predicate)
                .toArray(size -> (T[])Array.newInstance(clazz, size));
    }
    /**
     * ArrayFilterAfterToList：数组过滤后转list
     * @param array 数组
     * @param function 函数
     */
    public static <T,R> List<R> ArrayMapAfterToList(T[] array, Function<? super T, ? extends R> function) {
        if (array == null || array.length == 0) {
            return null; // 返回空数组或原数组
        }
        return Arrays.stream(array).map(function).collect(Collectors.toList());
    }








}
